home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Controls / Visual Basic Controls.iso / vbcontrol / vsfd1016 / data1.cab / Sample_-_Linked_List / List.bas < prev   
Encoding:
BASIC Source File  |  1998-08-03  |  2.3 KB  |  97 lines

  1. Attribute VB_Name = "List"
  2. Option Explicit
  3.  
  4. Public g_vsfList As VSFlexData
  5. ' A global VSFlexData object that will serve
  6. ' as the doubly linked list
  7.  
  8. Public Sub InsertNode(Data As VSFlexData)
  9. ' Inserts a node in the list
  10.  
  11.     Dim vsfTemp As VSFlexData
  12.     Set vsfTemp = New VSFlexData
  13.         
  14.     With vsfTemp
  15.         .SetMap
  16.     
  17.         If g_vsfList.Length > 0 Then
  18.             Set !Prev = g_vsfList(g_vsfList.Length)
  19.         Else
  20.             Set !Prev = Nothing
  21.         End If
  22.         
  23.         Set !Next = Nothing
  24.         Set !Data = Data.Clone
  25.     End With
  26.     
  27.     g_vsfList.AddLast vsfTemp
  28.     
  29.     If g_vsfList.Length > 1 Then
  30.         g_vsfList(g_vsfList.Length - 1)!Next = g_vsfList(g_vsfList.Length)
  31.     End If
  32. End Sub
  33.  
  34. Public Function DeleteNode(Pos As Long)
  35. ' Deletes a node at a given position
  36.  
  37.     If g_vsfList(Pos) Is LastNode Then
  38.     ' Last
  39.         Set g_vsfList(Pos)!Prev!Next = Nothing
  40.     ElseIf g_vsfList(Pos) Is FirstNode Then
  41.     ' First
  42.         Set g_vsfList(Pos)!Next!Prev = Nothing
  43.     Else
  44.     ' Middle
  45.         Set g_vsfList(Pos)!Prev!Next = g_vsfList(Pos)!Next
  46.         Set g_vsfList(Pos)!Next!Prev = g_vsfList(Pos)!Prev
  47.     End If
  48.     
  49.     g_vsfList.Remove Pos
  50. End Function
  51.  
  52. Public Property Get FirstNode() As VSFlexData
  53. ' Returns the first node
  54.  
  55.     If g_vsfList.Length Then
  56.         Set FirstNode = g_vsfList(1)
  57.     Else
  58.         Set FirstNode = Nothing
  59.     End If
  60. End Property
  61.  
  62. Public Property Get LastNode() As VSFlexData
  63. ' Returns the last node
  64.  
  65.     If g_vsfList.Length Then
  66.         Set LastNode = g_vsfList(g_vsfList.Length)
  67.     Else
  68.         Set LastNode = Nothing
  69.     End If
  70. End Property
  71.  
  72. Public Sub TraversePrint()
  73. ' Traverses the list and prints the result in
  74. ' the immediate/debug window
  75.  
  76.     Dim vsfTraverse As VSFlexData
  77.     Dim vsfKeys As VSFlexData
  78.     Dim lngCounter As Long
  79.     
  80.     Set vsfTraverse = FirstNode
  81.     
  82.     Do
  83.         Set vsfKeys = vsfTraverse!Data.GetKeys
  84.         For lngCounter = 1 To vsfKeys.Length
  85.             Debug.Print vsfKeys(lngCounter) & "=" & vsfTraverse!Data(vsfKeys(lngCounter))
  86.         Next lngCounter
  87.         
  88.         Set vsfTraverse = vsfTraverse!Next
  89.         Debug.Print
  90.     Loop While Not vsfTraverse Is Nothing
  91.     
  92.     Debug.Print
  93.  
  94. End Sub
  95.  
  96.  
  97.